package com.lwl.blue.seven.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;

import java.util.Date;
import java.util.List;

/**
 * 创建合同DTO
 * @author system
 * @since 2025-09-17
 */
@Data
public class Contract7CreateDTO {

    /**
     * 合同编号（必填，唯一）
     */
    @NotBlank(message = "合同编号不能为空")
    private String contractNumber;

    /**
     * 合同名称（必填）
     */
    @NotBlank(message = "合同名称不能为空")
    private String contractName;

    /**
     * 供应商ID（必填）
     */
    @NotNull(message = "供应商不能为空")
    private Integer supplierId;

    /**
     * 交易类型（必填）
     */
    @NotBlank(message = "交易类型不能为空")
    private String transactionType;

    /**
     * 我方签约主体（采购方）
     */
    private String buyingEntity;

    /**
     * 采购员
     */
    private String purchaser;

    /**
     * 合同生效日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date effectiveDate;

    /**
     * 合同失效日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date expiryDate;

    /**
     * 合同总额
     */
    private BigDecimal totalAmount;

    /**
     * 付款条件
     */
    private String paymentTerms;

    /**
     * 备注
     */
    private String remarks;

    /**
     * 外部采购订单核销内码
     */
    private Long externalOrderId;

    /**
     * 外部采购订单核销外码
     */
    private String externalOrderCode;

    /**
     * 外部系统类型
     */
    private String externalSystemType;

    /**
     * 外部系统单据内码
     */
    private String externalSystemDocId;

    /**
     * 外部系统单号
     */
    private String externalSystemOrderNo;

    /**
     * 业务来源
     */
    private String businessSource;

    /**
     * 业务来源说明
     */
    private String businessSourceDesc;

    /**
     * 来源单据号
     */
    private String sourceDocNo;

    /**
     * 业务单据编码
     */
    private String businessDocCode;

    /**
     * 商品明细列表（至少一条）
     */
    @NotEmpty(message = "商品明细不能为空")
    private List<Contract7CreateItemDTO> itemList;
}